package com.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;

import static com.example.common.constant.Constant.JWT_ACCESS_TOKEN_CONVERTER_SIGNING_KEY;

/**
 * @author 罗俊华
 * @date 2022/3/10 - 3:16 下午
 */

@Configuration
public class TokenConfig {


    /**
     * 令牌存储的策略
     * @return
     */
    @Bean
    public TokenStore tokenStore(){
        // auth服务器的内存存储令牌对应的权限信息的方式，生成令牌
        //return new InMemoryTokenStore();

//        jwt 令牌本身存储 用户的权限信息，生成令牌
        return new JwtTokenStore(jwtAccessTokenConverter());
    }

    /**
     * 创建用户权限信息 到 token 相互转换的转换器
     * @return
     */
    @Bean
    public JwtAccessTokenConverter jwtAccessTokenConverter(){

        JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();

        jwtAccessTokenConverter.setSigningKey(JWT_ACCESS_TOKEN_CONVERTER_SIGNING_KEY);

        return jwtAccessTokenConverter;

    }
}
